首页 > 其他分享 >go 基础语法

go 基础语法

时间:2024-10-27 10:57:59浏览次数:4  
标签:int fmt 基础 语法 var numbers func go main

go 基础语法

结构

func function_name( [parameter list] ) [return_types] {
   函数体
}

示例

package main

import (
	"fmt"
)

func main(){
	a :=100
	var b=200
	var result int
	result = max(a,b)
	fmt.Printf("最大为 %d \n",result)

}
func max(c,d int) int {
	var res int
	if c>d {
		res = c
	}else {
		res =d
	}
	return res
}

函数返回多个值

package main
import "fmt"
func main(){
	name_one := "123"
	name_two := "456"
	var res string
	var out string
	res,out =swap(name_one,name_two)
	fmt.Println(res+out)
}
func swap(a,b string) (string,string){
	return b,a
}

变量作用域

//局部变量
package main
import "fmt"
func main(){
	var a,b,c int
	a=1
	b=2
	c=a+b
	fmt.Println(c)
}
//全局变量
package main
import "fmt"
var c int
func main(){
	var a,b int
	a=1
	b=2
	c=a+b
	fmt.Println(c)
}
//两者优先级
//局部变量
package main
import "fmt"
	var a int =2
func main(){
	var a,b int
	var c int
	a=1
	b=2
	c=a+b
	fmt.Println(c)
}
//结果
[root@localhost tmp]# go run tmp3.go 
3
//形式参数
package main

import "fmt"

/* 声明全局变量 */
var a int = 20;

func main() {
   /* main 函数中声明局部变量 */
   var a int = 10
   var b int = 20
   var c int = 0

   fmt.Printf("main()函数中 a = %d\n",  a);
   c = sum( a, b);
   fmt.Printf("main()函数中 c = %d\n",  c);
}

/* 函数定义-两数相加 */
func sum(a, b int) int {
   fmt.Printf("sum() 函数中 a = %d\n",  a);
   fmt.Printf("sum() 函数中 b = %d\n",  b);

   return a + b;
}
package main
import "fmt"
func main(){
	var number =[5] int {1,2,3,4,5}
	for j := 0; j < 5; j++ {
		number[j]=j+100
	}
	for i := 0; i < 5; i++ {
		fmt.Printf("number[%d]=%d\n",i,number[i])
	}
}

指针

package main
import "fmt"
func main(){
	var a string = "abc"
	var b *string
	b=&a
	fmt.Printf("a的地址为%x\n",&a)
	fmt.Printf("指针b指向%x\n",b)
	fmt.Printf("b=%s\n",*b)
}

指向数组的指针

package main
import "fmt"
const MAX int =3
func main(){
	var number =[3] int{2,3,4}
	var str [MAX] *int
	var i int
	//正常输出流程
	for i=0 ; i< MAX ; i++{
		fmt.Printf("number[%d]=%d\n",i,number[i])
	}
	//指针存储
	for i := 0; i < MAX; i++ {
		str[i]=&number[i]
	}
	//指针输出流程
	for i=0 ; i< MAX ; i++{
		fmt.Printf("number[%d]=%d\n",i,*str[i])
	}
}

指向指针的指针

package main
import "fmt"
func main(){
	var a int = 4
	var ptr *int
	var pptr **int
	ptr=&a
	pptr=&ptr
	fmt.Printf("pptr为%d\n",**pptr)
	fmt.Printf("ptr为%d\n",*ptr)
	fmt.Printf("ptr地址为%x\n",*pptr)
}

指针做函数参数

package main

import "fmt"

func main() {
	var a int = 10
	var b int = 20
	fmt.Printf("交换前\n a=%d,b=%d\n", a, b)
	swap(&a, &b)
	fmt.Printf("交换后\n a=%d,b=%d\n", a, b)
}
func swap(c, d *int) {
	var tmp int
	tmp = *c
	*c = *d
	*d = tmp

}

结构体

简单定义与输出

package main

import "fmt"

type book struct {
	title  string
	author string
	num    int
}

func main() {
	fmt.Printf("%v\n",book{"abc", "big", 12})
	fmt.Println(book{"Go 语言", "Go 语言教程", 6495407})
	fmt.Printf("%+v\n",book{"abc", "big", 12})

}

[root@localhost go]# ./tmp10 
{abc big 12}
{Go 语言 Go 语言教程 6495407}
{title:abc author:big num:12}
[root@localhost go]# 

访问结构体成员

package main

import "fmt"

type student struct {
	name string
	id   int16
}

func main() {
	var xiaowang student
	xiaowang.name = "小王"
	xiaowang.id = 1
	xiaoming := student{"小明", 2}
	fmt.Println(xiaoming)
	fmt.Println(xiaowang)

}

结构体作为函数参数

package main

import "fmt"

type student struct {
	name string
	id   int16
}

func main() {
	var xiaowang student
	xiaowang.name = "小王"
	xiaowang.id = 1
	xiaoming := student{"小明", 2}
	PrintBook(xiaoming)
	PrintBook(xiaowang)

}
func PrintBook(student_info student){
	fmt.Printf("student_name: %s\n",student_info.name)
	fmt.Printf("student_id:%d\n",student_info.id)
}

结构体指针

package main

import "fmt"

type student struct {
	name string
	id   int16
}

func main() {
	var xiaowang student
	xiaowang.name = "小王"
	xiaowang.id = 1
	xiaoming := student{"小明", 2}
	PrintBook(&xiaoming)
	PrintBook(&xiaowang)

}
func PrintBook(student_info *student){
	fmt.Printf("student_name: %s\n",student_info.name)
	fmt.Printf("student_id:%d\n",student_info.id)
}

切片

一般写法

package main

import "fmt"

func main() {
   /* 创建切片 */
   numbers := []int{0,1,2,3,4,5,6,7,8}   
   printSlice(numbers)

   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)

   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])

   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])

   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])

   numbers1 := make([]int,0,5)
   printSlice(numbers1)
//numbers1 := make([]int,0,5) 创建了一个元素类型为 int 的切片,这个切片初始时没有元素(长度为0),但具有5个元素的容量。
   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)

   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)

}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

切片的拷贝与追加

package main

import "fmt"

func main() {
   var numbers []int
   printSlice(numbers)

   /* 允许追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1)   
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

标签:int,fmt,基础,语法,var,numbers,func,go,main
From: https://www.cnblogs.com/guixiangyyds/p/18508067

相关文章

  • 通过duxapp提供的基础方法、UI组件、全局样式,快速编写项目
    使用duxapp,我是如何实现快速完成项目开发的?像下面这个例子,这个项目有140多个页面,但是真实的开发时间,在熟练使用duxapp的情况下,不会超过两周,并且可以将它兼容APP、小程序、H5这里仅展示了其中一部分页面,这个项目主要包含下这些功能购物订单流程售后退换文章发布门店功能......
  • (开题报告)django+vue《集慧》毕业论文管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于毕业论文管理系统的研究,现有研究主要以传统的管理模式为主,如单纯的文档管理和流程跟踪等方式。专门针对将Django和Vue技术相结合......
  • 简答剖析 UDP:从基础代码到高级封装与应用
    C++学习之路一、C++中构造函数与析构函数简单解析二、Makefile编写简单教程三、UDP协议学习四、简答剖析UDP:从基础代码到高级封装与应用简答剖析UDP:从基础代码到高级封装与应用C++学习之路前言一、UDP基础:涉及的API和结构体(一)`sockaddr_in`结构体(二)`sock......
  • 大数据技术045_python国潮男装微博评论数据分析系统的设计与实现 django flask爬虫可
    目录具体实现截图技术栈预期达到的目标开发技术介绍论文大纲目录编码规范核心代码部分展示其他项目推荐详细视频演示源码获取方式具体实现截图技术栈Python也提供了数据库的操作接口,通过引入Python的MySQL处理对象连接数据库后,使用通用的SQL语句方法实现数......
  • 实验2 类和对象——基础编程1
    一、实验目的 加深对类,对象的理解,能够解释类的封装,类的接口会使用C++语法规则正确定义,实现,测试类,会使用类创建对象,并基于对象编程针对具体问题场景,练习运用面向对象思维进行设计,合理利用C++语言特性(访问权限控制,static,friend,const),在数据共享和保护之间达到平衡会用多文件......
  • 2024-2025-1 20241428 《计算机基础与程序设计》第5周学习总结
    作业信息|这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)||这个作业的目标|Pep/9虚拟机机器语言与汇编语言算法与伪代码测试:黑盒,白盒||作业正文|https://i.cnblogs.com/posts/edit |教材学习内容总结算法的特性:有穷性:算法必须在执行......
  • 【Python入门】7天速成Python网络爬虫高手,Autoscraper从零基础到实战只需一篇
    ......
  • [QT基础系列]单选按钮QRadioButton
    单选按钮QRadioButtonQt中的单选按钮类是QRadioButton它是一个可以切换选中(checked)或未选中(unchecked)状态的单选按钮单选按钮常用在“多选一”的场景,也就是说,在一组单选按钮中,一次只能选中一个单选按钮比如性别中的“男女”二选一,学历中的“博士/硕士/本科/其他......
  • [QT基础系列]复选按钮QCheckBox
    复选按钮QCheckBoxQt中的复选按钮类是QCheckBox它和[单选按钮]很相似,单选按钮常用在“多选一”的场景,而复选按钮常用在"多选多"的场景比如喜欢的水果选项中,可以在“苹果/桃/梨/橘子/香蕉”中选择多个。文本这两个是其父类QAbstractButton中的属性和方法,因此......
  • 2024-2025-1 20241311 《计算机基础与程序设计》第5周学习总结
    学期2024-2025-1学号20241311《计算机基础与程序设计》第5周学习总结作业信息这个作业属于哪个课程<班级的链接>2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第五周作业)这个作业的目标<写上具体方......