首页 > 其他分享 >Go(2)

Go(2)

时间:2023-03-15 19:55:07浏览次数:23  
标签:func 函数 int fmt str Go main

统计

1出现的频率
string.Count(str,x)
//str:是待查找的字符串
//x:可以是一个字符串也可以是一个变量,反应的是变量的值
2字符数量
len([]rune(str))
或
import
	"unicode/utf-8"
utf8.RuneCountInString(str)

大小写转换

strings.ToLower(str) 转为小写
strings.ToUpper(str) 转为大写

修剪

strings.Trim(str,x) 修剪str左右两边开头的字符串
strings.TrimLeft(str,x)   仅修剪左边开头的
strings.TrimRight(str,x)  仅修剪右边开头的

分割

strings.Split(str,x)   分割了函数返回的是切片类型

 

 

插入字符

strings.Join(str,string) ///aaa bbb ccc ->aaa;bbb;ccc
//string.Field()
package main

import (
	"fmt"
	"strings"
)

func main() {
	s := "hello world hello world"
	index := strings.Fields(s)
	fmt.Println(index)
	fmt.Println(len(index)) //4
}

strconv包

用于字符串和其他类型的转换

strconv.Itoa(x)   十进制转字符串
strconv.FormatFloat(x)    64位浮点数转字符串
strconv.Atoi(x)   字符串转int
strconv.ParseFloat(x) 字符串转float64

字符串的格式化

 

 

基本数据类型的扩展

强制类型转换

type_name(exp)
//float64(x)

自定义类型

就是结构体

type stu stuct{
	Name string //首字母大写就是public
    age int  //小写就是private
    //都支持用set&get的方法使用
}

类型别名

byte是int8的别名;rune是int32的别名

 

 

指针

用&a  访问a的地址

nil指针

一个地址为0的指针

条件语句

if condition {
    
}else if condition {

}else{
    
}

选择语句

switch语句

package main

import (
	"fmt"
)

func main() {
	grade := "B"
	mark := 90
	switch mark {
	case 90:
		grade = "A"
	case 80:
		grade = "B"
	case 60, 70:
		grade = "C"
	default:
		grade = "D"
	}
	fmt.Printf("你的成绩为%s", grade)
}
//不同的地方就是他是执行了一个case不需要breack下面的case也不会执行
fallthrough会将控制跳到下个case

select语句

用于多个channel的并发读写操作,和switch不同他是随机一个case进行判断

package main

import (
	"fmt"
)

func main() {
	a := make(chan int, 1024)
	b := make(chan int, 1024)
	for i := 1; i <= 10; i++ {
		fmt.Printf("第%d次,", i)
		a <- 1
		b <- 1
		select {
		case <-a:
			fmt.Println("from a")
		case <-b:
			fmt.Println("from b")
		}
	}
}

循环语句

range子语句

 

 

 

 

 

延迟语句

defer是用延迟调用指定函数,只能出现在函数内部

 

 

所以defer一般用于回收资源、清理收尾等工作

defer的两个特点:

  • 只有当defer语句全部执行完,defer所在的函数才算执行结束
  • 全部defer语句执行完,才可以return

     

//返回
5
5
5
5
5

//栈 先入后出

标签

 

 

break
continue
goto

package main

func main() {
	var i int
	for {
		println(i)
		i++
		if i > 2 {
			goto BREAK //goto会跳转至BREAK标签
		}
	}
BREAK:
	println("break")v
}

函数

函数的声明

func 用于声明函数

函数名 用小写开头 只作用于所声明的包中 不能被其他包调用

用大写开头 可以被其他包调用

注意:go语言函数不支持嵌套、重载、默认参数

声明一个在外部定义的函数只需给出函数名和函数签名

func hello (str,num int)//外部实现

函数同样可以通过声明的方式作为一个函数类型被使用

type addNum func(int,int) int

函数可以被赋值给变量

add :=addNum

函数之间可以相互比较

引用相同的函数或返回值都是nil,则可以认为它们是相同的函数

函数不能在其他函数里面声明,就是不能嵌套

函数的参数

多个参数之间用","分割开,如果有多个相邻参数的类型相同可以合并

func Add(a,b int)(ret int,err error){
    
}

如果返回值列表中多个返回值的类型相同,也可以合并

func Add(a,b int) int{
     
}

函数的返回值

可以多返回值

多返回值说明返回值有不需要的可能,要用空标识符

函数作为类型

package main

import (
	"fmt"
)

func isOdd(v int) bool {//判断是否为单数
	if v%2 == 0 {
		return false
	}
	return true
}
func isEven(v int) bool {//判断是否为双数
	if v%2 == 0 {
		return true
	}
	return false
}

type boolFunc func(int) bool //便利性

func filter(slice []int, f boolFunc) []int {  //把函数当做参数
	var result []int
	for _, value := range slice { //遍历slice切片
		if f(value) {
			result = append(result, value)//append函数()在result后面在value元素
		}
	}
	return result
}
func main() {
	slice := []int{3, 1, 4, 5, 9, 2}
	fmt.Println("slice=", slice)
	odd := filter(slice, isOdd)
	fmt.Println("odd:", odd)
	even := filter(slice, isEven)
	fmt.Println("even:", even)
}

/*
slice= [3 1 4 5 9 2]
odd: [3 1 5 9]
even: [4 2]
*/

可变参数

func myfunc(arg ...int){
    
}

他们的类型都是一样的,可以用for来遍历

package main

import (
	"fmt"
)

func main() {
	//手动填写参数
	age := minormax("min", 1, 3, 2, 0)
	fmt.Printf("min:%d\n", age)
	//数组作为参数
	ageArr := []int{7, 9, 3, 5, 1}
	age = minormax("max", ageArr...)//注意数组后面要加...
	fmt.Printf("max:%d", age)
}
func minormax(m string, a ...int) int {
	if len(a) == 0 {
		return 0
	}
	if m == "max" {
		max := a[0]
		for _, v := range a {
			if v > max {
				max = v
			}
		}
		return max
	} else if m == "min" {
		min := a[0]
		for _, v := range a {
			if v < min {
				min = v
			}
		}
		return min
	} else {
		e := -1
		return e
	}

}

标签:func,函数,int,fmt,str,Go,main
From: https://www.cnblogs.com/Map1eaf/p/17219755.html

相关文章

  • Django应用之间模型字段关联(实现表与表解耦)
    serializers.SerializerMethodField和钩子方法结合,可以实现对ModelSerializer类的一些字段进行二次加工classtbl_group_case(models.Model):STATUS_NORMAL=0......
  • 开心档之Go 语言常量
    Go语言常量常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的定义格式:constid......
  • vue + djangorestframework實現文件下載功能
    1.安裝模塊及配置及配置先安裝django-cors-headers包pip3installdjangorestframeworkdjango-cors-headers 在setting文件中註冊appINSTALLED_APPS=['djang......
  • go开发入门篇之go语言
    ​​ Go语言提供了数组类型的数据结构。数组是一组已编号的、长度固定的数据项序列,具有相同的唯一类型,可以是任意的原始类型,例如整型、字符串或自定义类型。相对于......
  • Go包与依赖管理
    包与依赖管理在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何引入其他包。同时也将介......
  • go语言中defer的注意事项
    defer介绍Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后......
  • 时间复杂度计算-go
    两段函数,判断函数执行速度funct1()int{fmt.Println("helloworld")return0}此段函数运行次数为2次,打印字符串一次,返回0值一次,T(n)估算值为:T(n)=2//i:=0......
  • django-filter用法
    一.环境准备pipinstallDjango==2.2-ihttps://pypi.douban.com/simplepipinstalldjangorestframework==3.10-ihttps://pypi.douban.com/simplepipinstalldjan......
  • (转)go context详解
    原文:https://www.cnblogs.com/niuben/p/15110611.html前言平时在Go工程的开发中,几乎所有服务端的默认实现(例如:HTTPServer),都在处理请求时开启了新的 goroutine 进行......
  • go程Id retrieve the current goroutine's ID
    https://github.com/petermattis/goidfuncGoID()int{varbuf[64]byten:=runtime.Stack(buf[:],false)//得到id字符串idField:=strings.Fields(......