• go 基础语法


     变量

    // 变量定义
    // 方式一   先定义, 在赋值
    var value string
    value = "dddd"
    fmt.Printf("value is :%s\n", value)
    
    // 方式二  定义直接复制
    var value2 string = "heihei"
    fmt.Printf("value2:%s\n", value2)
    
    // 方式三  定义直接赋值,使用自动推导 :=    主推这种
    value3 := "ddd"
    fmt.Printf("value3: %s\n", value3)
    
    // 变量引用
    test(value3, 110)
    
    // 平行赋值
    i, j := "this is i", "this is j"
    fmt.Printf("i: %s, j: %s\n", i, j)
    
    // 交叉赋值
    i, j = j, i
    fmt.Printf("i: %s, j: %s\n", i, j)
    
    d := 10
    fmt.Println("d: ", d)
    

    基础数据类型

    /*
    	基础数据类型:
    
    	int8 int16 int32 int64
    
    	unit8 ... unit64
    
    	float32  float64
    
    	true/false
    */
    

    自增语法

    // 自增语法
    // 只有:i++ 或 i-- 其他的--i, ++i都没有
    // PS 自增语法必须单独一行,否则语法报错
    ii := 20
    // ii++
    fmt.Printf("ii: %d\n", ii)
    

    go 指针/* go 指针:

    	/*
    		go 指针:
    		结构体成员调用时: c中 P->name,    go中 P.name
    		go使用指针时会自动调用内部的垃圾回收机制(gc: garbage collector),开发人员不需要手动释放内存
    		c语言不允许返回栈上指针,go语言可以返回栈上指针,程序会在编译的时候确定变量的分配位置
    		编译的时候,如果发现有必要的话,就将变量分配到堆上
    	*/
    	// 定义指针方式一
    	name := "liming"
    	prt := &name
    	fmt.Printf("指针变量: %s\n", *prt)
    	fmt.Println("指针地址:", &name)
    
    	// 定义指针方式二
    	name2prt := new(string)
    	*name2prt = "xiaohua"
    	fmt.Println("name2:", *name2prt)
    	fmt.Println("name2prt:", name2prt)
    
    	// 可以返回栈上指针,编译器在编译时,会自动判断这段代码,将city变量分配在堆上
    	resp := test_city()
    	fmt.Println("city: ", *resp, "address: ", resp)
    
    	// 空指针, c 中 null , go 中 nil
    	// 判断空指针,if 两端不用加(),即使有一行代码,也必须使用{}
    	if resp == nil {
    		fmt.Println("resp 是空指针")
    	} else {
    		fmt.Println("resp 是非空指针")
    	}
    
    
    // 定义一个返回sting指针的函数, go返回值写在参数 后面
    func test_city() *string {
    	city := "成都"
    	prt := &city
    	return prt
    }

    字符串

    // 字符串
    // 1、原生输出(使用反引号 `` )
    str := `
    usage: 
    	-a    this is all
    	-h    this is help
    	-v    version
    `
    fmt.Println("name str: ", str)
    
    // 长度, len()
    l1 := len(str)
    fmt.Println("l1: ", l1)
    
    // for 不需要加()
    names := "limiang"
    for i := 0; i < len(names); i++ {
    	fmt.Printf("i: %d,  v: %c\n", i, names[i])
    }
    
    // 字符串拼接
    str1 := "ddd"
    str2 := "ooo"
    fmt.Println("str1 + str2 = ", str1+str2)
    

    不支持语法

    // 不支持的语法
    /*
    	1、自增自减: ++i, --i
    	2、不支持地址加减
    	3、不支持三目运算符 ?:(如:x:= 10 > 12 ? 10 : 12)
    	4、只有false才能逻辑假, nil 和 0 都不能
    */
    

    权限

    /*
    访问权限:
    
    1、在go中访问权限是通过首字母大写来控制的
    2、import ===> 如果包名不同, 只有首字母大写的才是public的
    3、对于结构体(类)中的方法、属性,只有首字母大写才能在其他包中引用
    */
    

    结构体(类)

    package main
    
    import (
    	"fmt"
    )
    
    /*
    继承--操作
    */
    
    // 被继承的结构体(父类)
    type Human struct {
    	name   string
    	age    int
    	gender string
    }
    
    // 继承结构体(子类)
    type Teacher struct {
    	Human   // 直接写为继承,  hum: Human --> 包含hum变量,此时为类的嵌套
    	subject string
    }
    
    func main() {
    	// 实例化时指定参数
    	t := Teacher{
    		Human: Human{
    			name:   "笑话",
    			age:    5,
    			gender: "dog",
    		},
    		subject: "旺旺",
    	}
    	fmt.Println("t: ", t)
    	fmt.Println("t: ", t.Human.name)
    	t.age = 3 // 相同的属性, 子类会覆盖父类
    	fmt.Println("t: ", t.Human.age)
    
    	t2 := Teacher{}
    	t2.name = "limin"
    	t2.age = 16
    	t2.gender = "女"
    	t2.subject = "数学"
    	fmt.Println("t2 : ", t2)
    	fmt.Println("t2.Hume.age", t2.Human.age)
    }

    打印结果:

  • 相关阅读:
    从json中获取自己想要的属性
    对称加密解密
    springboot 读取resource目录下的文件
    安装nginx 配置了ssl 启动报错
    复利计算--4.0 单元测试之JAVA版-软件工程
    《构建之法》前三章读后感
    单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 WEB
    操作系统 实验一 命令解释程序的编写
    单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 C语言
    统计实验数据 总结实验结果
  • 原文地址:https://www.cnblogs.com/TF511/p/16662672.html
Copyright © 2020-2023  润新知