
本文将带你手把手打造一个基于 Go 语言、Flutter 和 PostgreSQL 的大型在线教育系统,我们将逐步实现后端和前端的功能。
mkdir online-education-system
cd online-education-system
go mod init online-education-system
使用 gin 框架和 pgx 驱动与 PostgreSQL 交互:
go get -u github.com/gin-gonic/gin
go get -u github.com/jackc/pgx/v4
创建 main.go 文件,添加以下代码:
package main
import (
"github.com/gin-gonic/gin"
"github.com/jackc/pgx/v4"
"context"
"log"
)
func main() {
r := gin.Default()
// 数据库连接
conn, err := pgx.Connect(context.Background(), "postgres://username:password@localhost:5432/yourdbname")
if err != nil {
log.Fatalf("Unable to connect to database: %v\n", err)
}
defer conn.Close(context.Background())
// 定义路由
r.GET("/api/courses", func(c *gin.Context) {
// 查询课程逻辑
c.JSON(200, gin.H{
"message": "获取课程列表",
})
})
r.Run() // 启动服务器
}
运行以下 SQL 语句创建数据库和表:
CREATE DATABASE yourdbname;
\c yourdbname;
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
确保你已经安装了 Flutter SDK,然后在终端中运行:
flutter create online_education_app
cd online_education_app
编辑 pubspec.yaml 文件,添加 http 依赖:
dependencies:
flutter:
sdk: flutter
http: ^0.14.0
然后运行:
flutter pub get
在 lib/main.dart 中,添加以下代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '在线教育系统',
home: CourseList(),
);
}
}
class CourseList extends StatefulWidget {
@override
_CourseListState createState() => _CourseListState();
}
class _CourseListState extends State<CourseList> {
List<dynamic> courses = [];
@override
void initState() {
super.initState();
fetchCourses();
}
Future<void> fetchCourses() async {
final response = await http.get(Uri.parse('http://localhost:8080/api/courses'));
if (response.statusCode == 200) {
setState(() {
courses = json.decode(response.body)['courses'];
});
} else {
throw Exception('Failed to load courses');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('课程列表'),
),
body: ListView.builder(
itemCount: courses.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(courses[index]['title']),
subtitle: Text(courses[index]['description']),
);
},
),
);
}
}
在 online-education-system 目录下运行:
go run main.go在 online_education_app 目录下运行:
flutter run原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。